package main

import (
	"fmt"
	"log"
	"os"

	"mcp-server/internal/config"
	"mcp-server/internal/qdrant"
	"mcp-server/internal/vector"
)

func main() {
	// 示例：中文文档向量化功能演示
	fmt.Println("=== 中文文档向量化功能演示 ===")

	// 1. 初始化配置
	configPath := "config/config.yaml"
	if len(os.Args) > 1 {
		configPath = os.Args[1]
	}

	configManager := config.NewConfigManager(configPath)
	if err := configManager.LoadConfig(); err != nil {
		log.Fatalf("配置加载失败: %v", err)
	}

	// 2. 初始化Qdrant服务
	qdrantService, err := qdrant.InitializeQdrant(configPath, "", "")
	if err != nil {
		log.Fatalf("Qdrant初始化失败: %v", err)
	}
	defer qdrantService.Close()

	// 3. 初始化向量化服务
	vectorIntegration := vector.NewVectorIntegration(qdrantService, configManager.GetConfig())
	if err := vectorIntegration.Initialize(); err != nil {
		log.Fatalf("向量化服务初始化失败: %v", err)
	}
	defer vectorIntegration.Close()

	// 4. 演示文本向量化
	demonstrateTextVectorization(vectorIntegration)

	// 5. 演示相似性搜索
	demonstrateSimilaritySearch(vectorIntegration)

	fmt.Println("\n=== 演示完成 ===")
}

func demonstrateTextVectorization(vectorIntegration *vector.VectorIntegration) {
	fmt.Println("\n--- 文本向量化演示 ---")

	manager := vectorIntegration.GetManager()
	if manager == nil {
		log.Println("向量管理器未初始化")
		return
	}

	// 测试中文文本
	testTexts := []string{
		"人工智能是计算机科学的一个分支，它企图了解智能的实质，并生产出一种新的能以人类智能相似的方式做出反应的智能机器。",
		"机器学习是人工智能的一个子领域，专注于算法的设计，这些算法可以从数据中学习并做出预测或决策。",
		"深度学习是机器学习的一个子集，它使用具有多个层次的神经网络来模拟人脑的工作方式。",
		"自然语言处理是人工智能和语言学领域的分支学科，关注计算机与人类语言之间的交互。",
	}

	for i, text := range testTexts {
		fmt.Printf("\n文本 %d: %s\n", i+1, text)

		// 向量化文本 - 使用向量服务
		vectorService := vector.NewVectorService()
		err := vectorService.Initialize(nil)
		if err != nil {
			log.Printf("向量服务初始化失败: %v", err)
			continue
		}
		
		result, err := vectorService.VectorizeText(text, map[string]interface{}{
			"example_id": fmt.Sprintf("demo_%d", i+1),
			"category":   "AI技术",
		})

		if err != nil {
			log.Printf("向量化失败: %v", err)
			continue
		}

		if result.Success {
			fmt.Printf("向量化成功: 维度=%d, 处理时间=%dms\n",
				len(result.Vector), result.ProcessTime)

			if result.Quality != nil {
				fmt.Printf("质量指标: 向量范数=%.4f, 文本长度=%d, 一致性=%.4f\n",
					result.Quality.VectorNorm, result.Quality.TextLength, result.Quality.Consistency)
			}
		} else {
			fmt.Printf("向量化失败: %s\n", result.Error)
		}
	}
}

func demonstrateSimilaritySearch(vectorIntegration *vector.VectorIntegration) {
	fmt.Println("\n--- 相似性搜索演示 ---")

	// 搜索查询
	queries := []string{
		"什么是人工智能？",
		"机器学习算法",
		"神经网络原理",
	}

	for _, query := range queries {
		fmt.Printf("\n查询: %s\n", query)

		results, err := vectorIntegration.SearchSimilar(query, 3)
		if err != nil {
			log.Printf("搜索失败: %v", err)
			continue
		}

		if len(results) == 0 {
			fmt.Println("未找到相似结果")
			continue
		}

		fmt.Printf("找到 %d 个相似结果:\n", len(results))
		for i, result := range results {
			fmt.Printf("  %d. 相似度: %.4f\n", i+1, result.Score)
			if result.Payload != nil {
				if text, ok := result.Payload["text"].(string); ok {
					// 截断长文本
					if len(text) > 100 {
						text = text[:100] + "..."
					}
					fmt.Printf("     内容: %s\n", text)
				}
			}
		}
	}
}
